home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / winlib.lzh / WINLIB / COOKIES.C < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-04  |  3.2 KB  |  168 lines

  1. /********************************************************************
  2.  *                                                                    *
  3.  *    Cookie information                                                *
  4.  *                                                                    *
  5.  *    Copyright (C) 1994, Bitgate Software and Clever Bits.            *
  6.  *    All rights reserved.                                            *
  7.  *                                                                    *
  8.  *    This information was taken from GEMView, with all due respects.    *
  9.  *                                                                    *
  10.  *    These routines are designed to create your own cookies, and to    *
  11.  *    handle the cookie jar information.  Since WinLIB will eventually*
  12.  *    install its own cookie, these routines need to be bug-fixed.    *
  13.  *                                                                    *
  14.  ********************************************************************/
  15.  
  16. #include <stddef.h>
  17. #include <tos.h>
  18. #include "winlib.h"
  19.  
  20. #ifndef __COOKIES__
  21. #define __COOKIES__
  22. #endif
  23.  
  24. COOKIE    *MainCJar;
  25.  
  26. GLOBAL long *get_cookiejar(void)
  27. {
  28.     register long old_stack, *jar;
  29.  
  30.     old_stack = (long) Super(0L);
  31.     jar = *((long **) 0x5A0L);
  32.     Super((long *) old_stack);
  33.     return(jar);
  34. }
  35.  
  36. GLOBAL void create_cookie(COOKIE *cookie, long id, long value)
  37. {
  38.     *((long *) cookie)++ = id;
  39.     *((long *) cookie) = value;
  40. }
  41.  
  42. GLOBAL int new_cookie(COOKIE *ent)
  43. {
  44.     register long *cookiejar = get_cookiejar();
  45.     register int act_row = 0;
  46.  
  47.     if (cookiejar) {
  48.         while(*cookiejar) {
  49.             cookiejar += 2;
  50.             act_row++;
  51.         }
  52.  
  53.         if (act_row < cookiejar[1]) {
  54.             cookiejar[2] = cookiejar[0];
  55.             cookiejar[3] = cookiejar[1];
  56.  
  57.             *cookiejar++ = *((long *) ent)++;
  58.             *cookiejar = *((long *) ent);
  59.             return(TRUE);
  60.         }
  61.     }
  62.     return(FALSE);
  63. }
  64.  
  65. GLOBAL int get_cookie(long cookie, long *value)
  66. {
  67.     register long *cookiejar = get_cookiejar();
  68.  
  69.     if (cookiejar) {
  70.         do {
  71.             if (*cookiejar == cookie) {
  72.                 if (value) *value = *++cookiejar;
  73.                 return(TRUE);
  74.             }
  75.             cookiejar += 2;
  76.         } while(*++cookiejar);
  77.     }
  78.     return(FALSE);
  79. }
  80.  
  81. GLOBAL int locate_cookie(long cookie)
  82. {
  83.     register long *cookiejar = get_cookiejar();
  84.  
  85.     if (cookiejar) {
  86.         do {
  87.             if (*cookiejar == cookie)
  88.                 return TRUE;
  89.  
  90.             cookiejar += 2;
  91.         } while (*++cookiejar);
  92.     }
  93.  
  94.     return FALSE;
  95. }
  96.  
  97. GLOBAL void remove_cookie(long cookie_id)
  98. {
  99.     register long *cookiejar = get_cookiejar();
  100.  
  101.     if (cookiejar) {
  102.         while (*cookiejar && cookiejar[1]!=cookie_id)
  103.             cookiejar += 2;
  104.  
  105.         if (*cookiejar) {
  106.             do {
  107.                 *cookiejar++ = cookiejar[2];
  108.                 *cookiejar = cookiejar[2];
  109.             } while(*cookiejar);
  110.         }
  111.     }
  112. }
  113.  
  114. GLOBAL void move_cookiejar(long *dest, long size)
  115. {
  116.     register long old_stack, *cookiejar, *dest_cop;
  117.  
  118.     old_stack = (long) Super(0L);
  119.     cookiejar = *((long **) 0x5A0L);
  120.  
  121.     if (cookiejar) {
  122.         dest_cop = dest;
  123.  
  124.         do {
  125.             *dest++ = *cookiejar++;
  126.             *dest++ = *cookiejar++;
  127.         } while (*cookiejar);
  128.  
  129.         *dest++ = *cookiejar;
  130.         *dest = size;
  131.  
  132.         cookiejar = (long *) 0x5A0L;
  133.         *cookiejar = (long) dest_cop;
  134.     }
  135.     Super((long *) old_stack);
  136. }
  137.  
  138. GLOBAL long cookie_size()
  139. {
  140.     register long *cookiejar = get_cookiejar();
  141.  
  142.     if (cookiejar) {
  143.         while(*cookiejar) cookiejar += 2;
  144.         return(*++cookiejar);
  145.     }
  146.     return(0);
  147. }
  148.  
  149. GLOBAL COOKIE *find_cookie(long id)
  150. {
  151.     long *jar;
  152.  
  153.     if (((long *)jar = get_cookiejar()) == 0)
  154.         return(0);
  155.  
  156.     while(*jar) {
  157.         if(*jar == id) return((COOKIE *)jar);
  158.         jar += 2;
  159.     }
  160.  
  161.     return(0);
  162. }
  163.  
  164. GLOBAL void InitCookies(void)
  165. {
  166.     (long *) MainCJar = get_cookiejar();
  167. }
  168.